package cn.doitedu.df_rdd

import cn.doitedu.beans.Student
import cn.doitedu.util.SparkUtil
import org.apache.spark.rdd.RDD

/**
 * @Date 22.4.12
 * @Created by HANGGE
 * @Description
 *             将数据封装在case class中  转换成DF
 */
object C03_RDD_2_DF_Caseclass {
  def main(args: Array[String]): Unit = {
    val session = SparkUtil.getSession
    //获取sparkContext
    val sc = session.sparkContext
    // 加载数据  RDD
    val rdd: RDD[String] = sc.textFile("data\\scores\\Scores.csv")

    // RDD的数据结构 封装case  class
    val rdd2: RDD[Student] = rdd.map(line => {
      val arr = line.split(",")
      Student(arr(0).toInt, arr(1), arr(2).toInt, arr(3), arr(4), arr(5).toDouble)
    })

    // 转换成DF
    val df = session.createDataFrame(rdd2)
    // 转换成DF
    import session.implicits._
    val df2 = rdd2.toDF

    /**
     * root
     * |-- id: integer (nullable = false)
     * |-- name: string (nullable = true)
     * |-- age: integer (nullable = false)
     * |-- sex: string (nullable = true)
     * |-- city: string (nullable = true)
     * |-- score: double (nullable = false)
     * sparksql底层获取到   样例类  通过反射获取样例类的结构
     * 根据样例类的结构  封装一个StructType 封装数据的Schema
     * 字段名
     * 数据类型
     */
    df.printSchema()
    df.show()
  }

}
